package source.javadog.mysource;

import source.javadog.bean.Person;

import java.io.Serializable;
import java.util.List;

/**
 * Author : manyu
 * Date: 2018/9/9 17:35
 * Description:
 */
public interface MyDataSource {

    /**
     * 获取数据源类型
     *
     * @return String
     */
    String getType();

    //todo default的意义

    /**
     * 查询记录的List集合   <br>
     * 等价SQL: SELECT * FROM {table}  <br>
     *
     * @param <T>   Entity泛型
     * @param clazz Entity类
     * @return Entity的集合
     */
    <T> List<T> findList(Class<T> clazz);

    /**
     * 获取指定主键值的单个记录, 返回null表示不存在值   <br>
     * 等价SQL: SELECT * FROM {table} WHERE {primary} = {id}  <br>
     *
     * @param <T>   Entity泛型
     * @param clazz Entity类
     * @param pk    主键值
     *
     * @return Entity对象
     */
    <T> T find(final Class<T> clazz, final Serializable pk);

    /**
     * 保存
     */
    <T> boolean save(T insert);

    /**
     * 删除
     */
    <T>  boolean delete(final Class<T> clazz, final Serializable pk);

    /**
     * 修改
     */
    <T>  boolean update(T update);
}
